#include "EstructurasPrueba.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

t_chs CHS;
t_nodo * colaFte;
t_nodo * colaFin;

void imprimirSectoresRecorridos(t_nodo *, int *, int *);
void trace (t_nodo *);
void meterEnCola(t_nodo **, t_nodo **, long, char *, unsigned char, long);
t_nodo * busquedaAlgoritmoCSCAN (t_nodo **, t_nodo **);
t_nodo * algoritmoCSCAN(t_nodo **, t_nodo **);

int main(int argc, char **argv) {
int i = 0;
unsigned long nroSector;
unsigned long pista;
unsigned char tipo = 0;
colaFte = NULL;
colaFin = NULL;
char * datos;
t_nodo * nodoSolicitado;
char Algoritmo[10] = "CSCAN";
CHS.pista = 3;
CHS.sector = 3;

while(i != -1){

printf("ingresar nroSector \n");
scanf("%lu", &nroSector);

printf("ingresar pista \n");
scanf("%lu", &pista);

meterEnCola(&colaFte, &colaFin, nroSector, datos, tipo, pista);

printf("Si este es el ultimo nodo de la cola ingrese -1, sino 0 \n");
scanf("%d", &i);

}

while (colaFte != 0) {
    nodoSolicitado = algoritmoCSCAN (&colaFte, &colaFin);
    trace(nodoSolicitado);
}

return 0;

}

void imprimirSectoresRecorridos(t_nodo * nodoSolicitado, int * cantSecRec, int * cantPisRec){

int salir  = 0;
long cantidadPistas  = 10;
long cantSecPorPista = 10;
*cantSecRec = 0;
*cantPisRec = 0;

printf("%c%lu:%lu,",' ', CHS.pista, CHS.sector);

if ((nodoSolicitado->pista == CHS.pista) && (nodoSolicitado->nroSector == CHS.sector))
    salir = 1;

else{


if (nodoSolicitado->pista >= CHS.pista) {
    while(!salir){
        while(CHS.pista != nodoSolicitado->pista){ //mientras no encuentre la pista solicitada
            if(CHS.pista == cantidadPistas - 1){
                CHS.pista = 0;
                printf("%c%lu:%lu,",' ', CHS.pista, CHS.sector);
                (*cantPisRec) ++;
            }
            else {
                CHS.pista = CHS.pista + 1;
                printf("%c%lu:%lu,",' ', CHS.pista, CHS.sector);
                (*cantPisRec) ++;
            }
        }

        while(CHS.sector != nodoSolicitado->nroSector){// mientras no encuentre el sector solicitado
            if(CHS.sector == cantSecPorPista - 1){
                CHS.sector = 0;
                printf("%c%lu:%lu,",' ', CHS.pista, CHS.sector);
                (*cantSecRec) ++;
            }
            else{
                CHS.sector = CHS.sector + 1;
                printf("%c%lu:%lu,",' ', CHS.pista, CHS.sector);
                (*cantSecRec) ++;
            }
            salir = 1;
        }
     }
}


else {
    while(!salir){
        while(CHS.pista != nodoSolicitado->pista){//mientras no encuentre la pista solicitada
            CHS.pista = CHS.pista - 1;
            printf("%c%lu:%lu,",' ', CHS.pista, CHS.sector);
            (*cantPisRec) ++;
        }
        while(CHS.sector != nodoSolicitado->nroSector){//mientras no encuentre el sector solicitado
            if (CHS.sector == cantSecPorPista - 1) {
                CHS.sector = 0;
                printf("%c%lu:%lu,",' ', CHS.pista, CHS.sector);
                (*cantSecRec) ++;
            }
            else{
                CHS.sector = CHS.sector + 1;
                printf("%c%lu:%lu,",' ', CHS.pista, CHS.sector);
                (*cantSecRec) ++;
            }
        salir = 1;
        }
    }
}
}
}

void trace (t_nodo * nodoSolicitado){
int T_SaltoSector = 1;
int T_SaltoPista = 10;
int tiempoConsumido = 0;
int  cantSecRec = 0;
int  cantPisRec = 0;
t_nodo * nodoSolicitadoSiguiente = NULL;


    printf("Posicion Actual: %lu:%lu \n",CHS.pista,CHS.sector);
    printf("Sector Solicitado: %lu:%lu \n", nodoSolicitado->pista, nodoSolicitado->nroSector);
    printf("Sectores Recorridos:");
    printf("%c", ' ');
    imprimirSectoresRecorridos(nodoSolicitado,&cantSecRec, &cantPisRec); //verificar el parametro con los *
    printf("\n");
    tiempoConsumido = (cantPisRec * T_SaltoPista) + (cantSecRec * T_SaltoSector);
    printf("Tiempo Consumido: %d ms \n", tiempoConsumido);

    nodoSolicitadoSiguiente = busquedaAlgoritmoCSCAN(&colaFte, &colaFin);
    if(nodoSolicitadoSiguiente == NULL){
        printf("Proximo Sector: ...");
    }
    else {
    printf("Proximo Sector: %lu:%lu \n", nodoSolicitadoSiguiente->pista, nodoSolicitadoSiguiente->nroSector);
    printf("\n\n");
    }
}


